package com.itheima.app.manager;

import cn.hutool.core.collection.CollectionUtil;
import com.itheima.app.interceptor.UserHolder;
import com.itheima.autoconfig.im.HuanXinTemplate;
import com.itheima.domain.db.UserInfo;
import com.itheima.domain.mongo.RecommendUser;
import com.itheima.domain.mongo.UserLike;
import com.itheima.service.db.UserInfoService;
import com.itheima.service.mongo.FriendService;
import com.itheima.service.mongo.SlideCardsService;
import com.itheima.vo.SlideCardsVo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 探花-左滑右滑,是否已经喜欢
 *
 * @author DogeGuo
 */
@Component
public class SlideCardsManager {
    @DubboReference
    SlideCardsService slideCardsService;

    @DubboReference
    UserInfoService userInfoService;

    /**
     * 查询推荐用户
     *
     * @return
     */
    public ResponseEntity slideCards() {
        // 1. 获取当前用户的id
        Long toUserId = UserHolder.get().getId();

        // 2. 调用SlideCardsService查询推荐用户的列表
        List<RecommendUser> recommendUsers = slideCardsService.findRecommendUser(toUserId);

        // 3. 遍历recommendUsers集合
        List<SlideCardsVo> slideCardsVos = new ArrayList<>();
        if (CollectionUtil.isNotEmpty(recommendUsers)) {
            for (RecommendUser recommendUser : recommendUsers) {
                // 4. 取出推荐用户id
                Long userId = recommendUser.getUserId();

                // 5. 查询用户信息
                UserInfo userInfo = userInfoService.findById(userId);

                // 6. 创建vo对象并封装
                SlideCardsVo vo = new SlideCardsVo();
                vo.setUserInfo(userInfo);

                // 7. 添加进list集合
                slideCardsVos.add(vo);
            }
            // 9. 返回
            return ResponseEntity.ok(slideCardsVos);
        }
        return ResponseEntity.status(500).body("大数据还未给该您推荐用户！");
    }

    @DubboReference
    FriendService friendService;

    @Autowired
    HuanXinTemplate huanXinTemplate;

    /**
     * 右划喜欢，并判断对方是否喜欢自己
     *
     * @param likeUserId
     */
    public void saveLove(Long likeUserId) {
        // 1. 获取当前用户的id
        Long userId = UserHolder.get().getId();

        // 2. 创建userLike对象并封装
        UserLike userLike = new UserLike();
        userLike.setUserId(userId);
        userLike.setLikeUserId(likeUserId);
        userLike.setCreated(System.currentTimeMillis());

        // 3. 调用SlideCardsService保存并判断对方是否喜欢着你
        Boolean saveLove = slideCardsService.saveLove(userLike);

        // 4. 判断
        if (saveLove) {
            // 5. 说明对方也喜欢自己  所以调用FriendService加好友
            friendService.addContact(userId, likeUserId);

            // 6. 加环信好友
            huanXinTemplate.addContacts("HX" + userId, "HX" + likeUserId);

        }

        // 7. 删除掉推荐列表内的数据
        slideCardsService.remove(userId, likeUserId);
    }

    /**
     * 左划不喜欢
     *
     * @param likeUserId
     */
    public void removeLove(Long likeUserId) {
        // 1. 获取当前用户的id
        Long userId = UserHolder.get().getId();

        // 2. 调用SlideCardsService删除喜欢，并判断对方是否喜欢自己
        Boolean removeLove = slideCardsService.removeLove(userId, likeUserId);

        if (removeLove) {
            // 3. 若对方也喜欢自己，删除喜欢时候也要删除掉好友关系
            friendService.removeContacts(userId, likeUserId);

            // 4. 删除掉环信上的好友
            huanXinTemplate.deleteContacts("HX" + userId, "HX" + likeUserId);
        }

        // 5. 删除推荐列表内的数据
        slideCardsService.remove(userId, likeUserId);
    }

    /**
     * 是否喜欢（新增接口）
     *
     * @param likeUserId
     * @return
     */
    public ResponseEntity findAlreadyLove(Long likeUserId) {
        // 获取当前用户的id
        Long userId = UserHolder.get().getId();

        // 调用方法
        Boolean alreadyLove = slideCardsService.findAlreadyLove(userId, likeUserId);
        return ResponseEntity.ok(alreadyLove);
    }
}
